
/**
 * 此方法是全局异常捕获
 * 捕获异常 并且返回到前端
 * 
 * @param {*} ctx 
 * @param {*} next 
 */

const { HttpException } = require('../core/httpException');

const catchError = async (ctx,next) =>{
    try {
        await next()
    } catch (error) {
        // 在此处捕获到了异常之后进行响应处理
        // HTTP状态码 2xx 4xx 5xx
        // request_url 当前访问的接口
        // error_code 自定义的错误码
        // msg 错误信息 / 信息

        //开发环境 本地输出异常
        const isHttpException = error instanceof HttpException;
        const isDev = global.config.env === 'dev'
        if(isDev && !isHttpException){
            throw error
        }

        if(isHttpException){
            //已知异常 因为errorCode是自己定义的所以知道哪里错了
            ctx.body = {
                msg:error.msg,
                error_code:error.errorCode,
                request:`${ctx.method} ${ctx.path}`
            }
            ctx.status = error.code
        }else{
            //未知异常
            ctx.body = {
                msg:'服务器异常, 此错误未知',
                error_code:10086,
                request:`${ctx.method} ${ctx.path}`
            }
            ctx.status = 500
        }
    }
}

module.exports = catchError;